(() => {
	// https://docs.alipay.com/mini/api/ui-navigate
	my.navigateTo({
		url: 'new_page?count=100'
	});
	// test.js
	Page({
		onLoad(query: any) {
			my.alert({
				content: JSON.stringify(query),
			});
		}
	});
	my.redirectTo({
		url: 'new_page?count=100'
	});
	// 注意：调用 navigateTo 跳转时，调用该方法的页面会被加入堆栈，
	// 而 redirectTo 方法则不会。见下方示例代码

	// 此处是one页面
	my.navigateTo({
		url: 'two?pageId=10000'
	});

	// 此处是two页面
	my.navigateTo({
		url: 'one?pageId=99999'
	});

	// 在three页面内 navigateBack，将返回one页面
	my.navigateBack({
		delta: 2
	});
	my.reLaunch({
		url: '/page/index'
	});
	my.setNavigationBar({
		title: '你好',
		backgroundColor: '#108ee9',
		success() {
			my.alert({
				content: '设置成功',
			});
		},
		fail() {
			my.alert({
				content: '设置是失败',
			});
		},
	});
	my.showNavigationBarLoading();
	my.hideNavigationBarLoading();
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-tabbar
	my.switchTab({
		url: '/home'
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-feedback
	my.alert({
		title: '亲',
		content: '您本月的账单已出',
		buttonText: '我知道了',
		success: () => {
			my.alert({
				title: '用户点击了「我知道了」',
			});
		},
	});
	my.confirm({
		title: '温馨提示',
		content: '您是否想查询快递单号：1234567890',
		confirmButtonText: '马上查询',
		cancelButtonText: '暂不需要',
		success: (result) => {
			my.alert({
				title: `${result.confirm}`,
			});
		},
	});
	my.prompt({
		title: '标题单行',
		message: '说明当前状态、提示用户解决方案，最好不要超过两行。',
		placeholder: '给朋友留言',
		okButtonText: '确定',
		cancelButtonText: '取消',
		success: (result) => {
			my.alert({
				title: JSON.stringify(result),
			});
		},
	});
	my.showToast({
		type: 'success',
		content: '操作成功',
		duration: 3000,
		success: () => {
			my.alert({
				title: 'toast 消失了',
			});
		},
	});
	my.hideToast();
	my.showLoading({
		content: '加载中...',
		delay: 1000,
	});

	my.hideLoading();

	Page({
		onLoad() {
			my.showLoading();
			const that = this;
			setTimeout(() => {
				my.hideLoading({
					page: that,  // 防止执行时已经切换到其它页面，page指向不准确
				});
			}, 4000);
		}
	});
	my.showNavigationBarLoading();
	my.hideNavigationBarLoading();
	my.showActionSheet({
		title: '支付宝-ActionSheet',
		items: ['菜单一', '菜单二', '菜单三', '菜单四', '菜单五'],
		badges: [
			{ index: 0, type: 'none' },
			{ index: 1, type: 'point' },
			{ index: 2, type: 'num', text: '99' },
			{ index: 3, type: 'text', text: '推荐' },
			{ index: 4, type: 'more' }],
		cancelButtonText: '取消好了',
		success: (res) => {
			const btn = res.index === -1 ? '取消' : `第${res.index}个`;
			my.alert({
				title: `你点了${btn}按钮`
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-pulldown
	Page({
		onPullDownRefresh() {
			my.stopPullDownRefresh();
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-contact
	my.choosePhoneContact({
		success: (res) => {
			my.alert({
				content: `姓名：${res.name}\n号码：${res.mobile}`
			});
		}
	});
	my.chooseAlipayContact({
		count: 2,
		success: (res) => {
			my.alert({
				content: 'chooseAlipayContact response: ' + JSON.stringify(res)
			});
		},
		fail: (res) => {
			my.alert({
				content: 'chooseAlipayContact response: ' + JSON.stringify(res)
			});
		}
	});
	my.chooseContact({
		chooseType: 'multi', // 多选模式
		includeMe: true,     // 包含自己
		includeMobileContactMode: 'known', // 仅包含双向手机通讯录联系人，也即双方手机通讯录都存有对方号码的联系人
		multiChooseMax: 3,  // 最多能选择三个联系人
		multiChooseMaxTips: '超过选择的最大人数了',
		success: (res) => {
			my.alert({
				content: 'chooseContact : ' + JSON.stringify(res)
			});
		},
		fail: (res) => {
			my.alert({
				content: 'chooseContact : ' + JSON.stringify(res)
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-city
	my.chooseCity({
		cities: [
			{
				city: '朝阳区',
				adCode: '110105',
				spell: 'chaoyang'
			},
			{
				city: '海淀区',
				adCode: '110108',
				spell: 'haidian'
			},
			{
				city: '丰台区',
				adCode: '110106',
				spell: 'fengtai'
			},
			{
				city: '东城区',
				adCode: '110101',
				spell: 'dongcheng'
			},
			{
				city: '西城区',
				adCode: '110102',
				spell: 'xicheng'
			},
			{
				city: '房山区',
				adCode: '110111',
				spell: 'fangshan'
			}
		],
		hotCities: [
			{
				city: '朝阳区',
				adCode: '110105'
			},
			{
				city: '海淀区',
				adCode: '110108'
			},
			{
				city: '丰台区',
				adCode: '110106'
			}
		],
		success: (res) => {
			my.alert({
				content: `${res.city}:${res.adCode}`
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-date
	my.datePicker({
		format: 'yyyy-MM-dd',
		currentDate: '2012-12-12',
		startDate: '2012-12-10',
		endDate: '2012-12-15',
		success: (res) => {
			my.alert({
				content: res.date,
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-animation
	const animation = my.createAnimation({
		transformOrigin: "top right",
		duration: 3000,
		timeFunction: "ease-in-out",
		delay: 100,
	});
	Page({
		data: {
			animationInfo: {}
		},
		onShow() {
			const animation = my.createAnimation({
				duration: 1000,
				timeFunction: 'ease-in-out',
			});

			this.animation = animation;

			animation.scale(3, 3).rotate(60).step();

			this.setData({
				animationInfo: animation.export()
			});

			setTimeout(() => {
				animation.translate(35).step();
				this.setData({
					animationInfo: animation.export(),
				});
			}, 1500);
		},
		rotateAndScale(this: my.Page) {
			// 旋转同时放大
			this.animation.rotate(60).scale(3, 3).step();
			this.setData({
				animationInfo: this.animation.export(),
			});
		},
		rotateThenScale(this: my.Page) {
			// 先旋转后放大
			this.animation.rotate(60).step();
			this.animation.scale(3, 3).step();
			this.setData({
				animationInfo: this.animation.export(),
			});
		},
		rotateAndScaleThenTranslate(this: my.Page) {
			// 先旋转同时放大，然后平移
			this.animation.rotate(60).scale(3, 3).step();
			this.animation.translate(100, 100).step({ duration: 2000 });
			this.setData({
				animationInfo: this.animation.export()
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-canvas
	const ctx = my.createCanvasContext('awesomeCanvas');
	ctx.toTempFilePath({
		success() { },
	});

	ctx.setTextAlign("left");
	ctx.fillText("Hello world", 0, 100);

	ctx.setTextBaseline("top");
	ctx.fillText("Hello world", 0, 100);

	ctx.setFillStyle('blue');
	ctx.fillRect(50, 50, 100, 175);
	ctx.draw();

	ctx.setStrokeStyle('blue');
	ctx.strokeRect(50, 50, 100, 175);
	ctx.draw();

	ctx.setFillStyle('red');
	ctx.setShadow(15, 45, 45, 'yellow');
	ctx.fillRect(20, 20, 100, 175);
	ctx.draw();

	const grd = ctx.createLinearGradient(10, 10, 150, 10);
	grd.addColorStop(0, 'yellow');
	grd.addColorStop(1, 'blue');

	ctx.setFillStyle(grd);
	ctx.fillRect(20, 20, 250, 180);
	ctx.draw();

	grd.addColorStop(0, 'blue');
	grd.addColorStop(1, 'red');

	ctx.setFillStyle(grd);
	ctx.fillRect(20, 20, 250, 180);
	ctx.draw();

	grd.addColorStop(0.36, 'orange');
	grd.addColorStop(0.56, 'cyan');
	grd.addColorStop(0.63, 'yellow');
	grd.addColorStop(0.76, 'blue');
	grd.addColorStop(0.54, 'green');
	grd.addColorStop(1, 'purple');
	grd.addColorStop(0.4, 'red');

	ctx.setFillStyle(grd);
	ctx.fillRect(20, 20, 250, 180);
	ctx.draw();

	ctx.beginPath();
	ctx.moveTo(20, 20);
	ctx.lineTo(250, 10);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineWidth(10);
	ctx.moveTo(20, 35);
	ctx.lineTo(250, 30);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineWidth(20);
	ctx.moveTo(20, 50);
	ctx.lineTo(250, 55);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineWidth(25);
	ctx.moveTo(20, 80);
	ctx.lineTo(250, 85);
	ctx.stroke();

	ctx.draw();

	ctx.beginPath();
	ctx.moveTo(10, 10);
	ctx.lineTo(150, 10);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineCap('round');
	ctx.setLineWidth(20);
	ctx.moveTo(20, 70);
	ctx.lineTo(250, 80);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineCap('butt');
	ctx.setLineWidth(10);
	ctx.moveTo(25, 80);
	ctx.lineTo(250, 30);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineCap('square');
	ctx.setLineWidth(10);
	ctx.moveTo(35, 47);
	ctx.lineTo(230, 120);
	ctx.stroke();

	ctx.draw();

	ctx.beginPath();
	ctx.moveTo(20, 30);
	ctx.lineTo(150, 70);
	ctx.lineTo(20, 100);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineJoin('round');
	ctx.setLineWidth(20);
	ctx.moveTo(100, 20);
	ctx.lineTo(280, 80);
	ctx.lineTo(100, 100);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineJoin('bevel');
	ctx.setLineWidth(20);
	ctx.moveTo(60, 25);
	ctx.lineTo(180, 80);
	ctx.lineTo(90, 100);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineJoin('miter');
	ctx.setLineWidth(15);
	ctx.moveTo(130, 70);
	ctx.lineTo(250, 50);
	ctx.lineTo(230, 100);
	ctx.stroke();

	ctx.draw();

	ctx.beginPath();
	ctx.setLineWidth(15);
	ctx.setLineJoin('miter');
	ctx.setMiterLimit(1);
	ctx.moveTo(10, 10);
	ctx.lineTo(100, 50);
	ctx.lineTo(10, 90);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineWidth(15);
	ctx.setLineJoin('miter');
	ctx.setMiterLimit(2);
	ctx.moveTo(50, 10);
	ctx.lineTo(140, 50);
	ctx.lineTo(50, 90);
	ctx.stroke();

	ctx.beginPath();
	ctx.setLineWidth(15);
	ctx.setLineJoin('miter');
	ctx.setMiterLimit(3);
	ctx.moveTo(90, 10);
	ctx.lineTo(180, 50);
	ctx.lineTo(90, 90);
	ctx.stroke();

	ctx.draw();

	ctx.rect(20, 20, 250, 80);
	ctx.setFillStyle('blue');
	ctx.fill();
	ctx.draw();

	ctx.fillRect(20, 20, 250, 80);
	ctx.setFillStyle('blue');
	ctx.draw();

	ctx.setStrokeStyle('blue');
	ctx.strokeRect(20, 20, 250, 80);
	ctx.draw();

	ctx.setFillStyle('blue');
	ctx.fillRect(250, 10, 250, 200);
	ctx.setFillStyle('yellow');
	ctx.fillRect(0, 0, 150, 200);
	ctx.clearRect(10, 10, 150, 75);
	ctx.draw();

	ctx.moveTo(20, 20);
	ctx.lineTo(200, 20);
	ctx.lineTo(200, 200);
	ctx.fill();
	ctx.draw();

	ctx.rect(20, 20, 110, 40);
	ctx.setFillStyle('blue');
	ctx.fill();

	ctx.beginPath();
	ctx.rect(20, 30, 150, 40);

	ctx.setFillStyle('yellow');
	ctx.fillRect(20, 80, 150, 40);

	ctx.rect(20, 150, 150, 40);

	ctx.setFillStyle('red');
	ctx.fill();
	ctx.draw();

	ctx.moveTo(20, 20);
	ctx.lineTo(150, 10);
	ctx.lineTo(150, 150);
	ctx.stroke();
	ctx.draw();

	ctx.rect(10, 10, 100, 30);
	ctx.setStrokeStyle('blue');
	ctx.stroke();

	ctx.beginPath();
	ctx.rect(20, 50, 150, 50);

	ctx.setStrokeStyle('yellow');
	ctx.strokeRect(15, 75, 200, 35);

	ctx.rect(20, 200, 150, 30);

	ctx.setStrokeStyle('red');
	ctx.stroke();
	ctx.draw();

	ctx.rect(20, 20, 150, 50);
	ctx.setFillStyle('blue');
	ctx.fill();

	ctx.beginPath();
	ctx.rect(20, 50, 150, 40);

	ctx.setFillStyle('yellow');
	ctx.fillRect(20, 170, 150, 40);

	ctx.rect(10, 100, 100, 30);

	ctx.setFillStyle('red');
	ctx.fill();
	ctx.draw();

	ctx.moveTo(20, 20);
	ctx.lineTo(150, 20);
	ctx.lineTo(150, 150);
	ctx.closePath();
	ctx.stroke();
	ctx.draw();

	ctx.rect(20, 20, 150, 50);
	ctx.closePath();

	ctx.beginPath();
	ctx.rect(20, 50, 150, 40);

	ctx.setFillStyle('red');
	ctx.fillRect(20, 80, 120, 30);

	ctx.rect(20, 150, 150, 40);

	ctx.setFillStyle('blue');
	ctx.fill();
	ctx.draw();

	ctx.moveTo(20, 20);
	ctx.lineTo(150, 15);

	ctx.moveTo(20, 55);
	ctx.lineTo(120, 60);
	ctx.stroke();
	ctx.draw();

	ctx.moveTo(20, 20);
	ctx.rect(20, 20, 80, 30);
	ctx.lineTo(120, 80);
	ctx.stroke();
	ctx.draw();

	ctx.arc(200, 75, 50, 0, 2 * Math.PI);
	ctx.setFillStyle('#CCCCCC');
	ctx.fill();

	ctx.beginPath();
	ctx.moveTo(50, 65);
	ctx.lineTo(170, 80);
	ctx.moveTo(200, 35);
	ctx.lineTo(200, 235);
	ctx.setStrokeStyle('#AAAAAA');
	ctx.stroke();

	ctx.setFontSize(12);
	ctx.setFillStyle('yellow');
	ctx.fillText('0', 165, 78);
	ctx.fillText('0.6*PI', 96, 148);
	ctx.fillText('1*PI', 15, 57);
	ctx.fillText('1.7*PI', 94, 20);

	ctx.beginPath();
	ctx.arc(200, 85, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('blue');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(200, 35, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('green');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(450, 60, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('red');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(150, 35, 50, 0, 1.8 * Math.PI);
	ctx.setStrokeStyle('#666666');
	ctx.stroke();

	ctx.draw();

	ctx.beginPath();
	ctx.arc(30, 30, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('red');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(250, 25, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('blue');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(20, 100, 2, 0, 2 * Math.PI);
	ctx.arc(200, 100, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('green');
	ctx.fill();

	ctx.setFillStyle('yellow');
	ctx.setFontSize(14);

	ctx.beginPath();
	ctx.moveTo(30, 30);
	ctx.lineTo(30, 100);
	ctx.lineTo(150, 75);

	ctx.moveTo(250, 30);
	ctx.lineTo(250, 80);
	ctx.lineTo(70, 75);
	ctx.setStrokeStyle('#EEEEEE');
	ctx.stroke();

	ctx.beginPath();
	ctx.moveTo(30, 30);
	ctx.bezierCurveTo(30, 150, 250, 150, 180, 20);
	ctx.setStrokeStyle('black');
	ctx.stroke();

	ctx.draw();

	ctx.beginPath();
	ctx.arc(30, 30, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('red');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(250, 20, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('blue');
	ctx.fill();

	ctx.beginPath();
	ctx.arc(30, 200, 2, 0, 2 * Math.PI);
	ctx.setFillStyle('green');
	ctx.fill();

	ctx.setFillStyle('black');
	ctx.setFontSize(12);

	ctx.beginPath();
	ctx.moveTo(30, 30);
	ctx.lineTo(30, 150);
	ctx.lineTo(250, 30);
	ctx.setStrokeStyle('#AAAAAA');
	ctx.stroke();

	ctx.beginPath();
	ctx.moveTo(30, 30);
	ctx.quadraticCurveTo(30, 150, 250, 25);
	ctx.setStrokeStyle('black');
	ctx.stroke();

	ctx.draw();

	ctx.strokeRect(15, 15, 30, 25);
	ctx.scale(3, 3);
	ctx.strokeRect(15, 15, 30, 25);
	ctx.scale(3, 3);
	ctx.strokeRect(15, 15, 30, 25);

	ctx.draw();

	ctx.strokeRect(200, 20, 180, 150);
	ctx.rotate(30 * Math.PI / 180);
	ctx.strokeRect(200, 20, 180, 150);
	ctx.rotate(30 * Math.PI / 180);
	ctx.strokeRect(200, 20, 180, 150);

	ctx.draw();

	ctx.strokeRect(20, 20, 250, 80);
	ctx.translate(30, 30);
	ctx.strokeRect(20, 20, 250, 80);
	ctx.translate(30, 30);
	ctx.strokeRect(20, 20, 250, 80);

	ctx.draw();

	ctx.setFontSize(14);
	ctx.fillText('14', 20, 20);
	ctx.setFontSize(22);
	ctx.fillText('22', 40, 40);
	ctx.setFontSize(30);
	ctx.fillText('30', 60, 60);
	ctx.setFontSize(38);
	ctx.fillText('38', 90, 90);

	ctx.draw();

	ctx.setFontSize(42);
	ctx.fillText('Hello', 30, 30);
	ctx.fillText('alipay', 200, 200);

	ctx.draw();

	ctx.drawImage('https://img.alicdn.com/tfs/TB1GvVMj2BNTKJjy0FdXXcPpVXa-520-280.jpg', 2, 2, 250, 80);
	ctx.draw();

	ctx.setFillStyle('yellow');
	ctx.fillRect(10, 10, 150, 100);
	ctx.setGlobalAlpha(0.2);
	ctx.setFillStyle('blue');
	ctx.fillRect(50, 50, 150, 100);
	ctx.setFillStyle('red');
	ctx.fillRect(100, 100, 150, 100);

	ctx.draw();

	ctx.setLineDash([5, 15, 25]);
	ctx.beginPath();
	ctx.moveTo(0, 100);
	ctx.lineTo(400, 100);
	ctx.stroke();

	ctx.draw();

	ctx.rotate(45 * Math.PI / 180);
	ctx.setFillStyle('red');
	ctx.fillRect(70, 0, 100, 30);

	ctx.transform(1, 1, 0, 1, 0, 0);
	ctx.setFillStyle('#000');
	ctx.fillRect(0, 0, 100, 100);

	ctx.draw();

	ctx.rotate(45 * Math.PI / 180);
	ctx.setFillStyle('red');
	ctx.fillRect(70, 0, 100, 30);

	ctx.setTransform(1, 1, 0, 1, 0, 0);
	ctx.setFillStyle('#000');
	ctx.fillRect(0, 0, 100, 100);

	ctx.draw();

	ctx.save();
	ctx.setFillStyle('red');
	ctx.fillRect(20, 20, 250, 80);

	ctx.restore();
	ctx.fillRect(60, 60, 155, 130);

	ctx.draw();

	ctx.setFillStyle('blue');
	ctx.fillRect(20, 20, 180, 80);
	ctx.draw();
	ctx.fillRect(60, 60, 250, 120);
	ctx.draw(true);

	ctx.font = 'italic bold 50px cursive';
	const { width } = ctx.measureText('hello world');
	console.log(width);
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-map
	Page({
		onReady() {
			// 使用 my.createMapContext 获取 map 上下文
			this.mapCtx = my.createMapContext('userMap');
		},
		getCenterLocation(this: my.Page) {
			(this.mapCtx as my.MapContext).getCenterLocation({
				success(res) {
					console.log(res.longitude);
					console.log(res.latitude);
				}
			});
		},
		moveToLocation() {
			this.mapCtx.moveToLocation();
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ui-hidekeyboard
	my.hideKeyboard();
})();

(() => {
	// https://docs.alipay.com/mini/api/scroll
	my.pageScrollTo({
		scrollTop: 100
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/selector-query
	Page({
		onReady() {
			my.createSelectorQuery()
				.select('#non-exists').boundingClientRect()
				.select('#one').boundingClientRect()
				.selectAll('.all').boundingClientRect()
				.select('#scroll').scrollOffset()
				.selectViewport().boundingClientRect()
				.selectViewport().scrollOffset().exec((ret) => {
					console.log(JSON.stringify(ret, null, 2));
				});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/ewdxl3
	my.multiLevelSelect({
		title: 'nihao', // 级联选择标题
		list: [
			{
				name: "杭州市", // 条目名称
				subList: [
					{
						name: "西湖区",
						subList: [
							{
								name: "古翠街道"
							},
							{
								name: "文新街道"
							}
						]
					},
					{
						name: "上城区",
						subList: [
							{
								name: "延安街道"
							},
							{
								name: "龙翔桥街道"
							}
						]
					}
				]// 级联子数据列表
			}
		]// 级联数据列表
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/openapi-authorize
	my.getAuthCode({
		scopes: 'auth_user',
		success: (res) => {
			my.alert({
				content: res.authCode,
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/userinfo
	my.getAuthCode({
		scopes: 'auth_user',
		success: (res) => {
			my.getAuthUserInfo({
				success: (userInfo) => {
					my.alert({
						content: userInfo.nickName
					});
					my.alert({
						content: userInfo.avatar
					});
				}
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/openapi-pay
	my.tradePay({
		tradeNO: '201711152100110410533667792', // 调用统一收单交易创建接口（alipay.trade.create），获得返回字段支付宝交易号trade_no
		success: (res) => {
			my.alert({
				content: JSON.stringify(res),
			});
		},
		fail: (res) => {
			my.alert({
				content: JSON.stringify(res),
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/pay-sign
	my.paySignCenter({
		// tslint:disable-next-line:max-line-length
		signStr: 'biz_content%3D%257B%2522access_params%2522%253A%257B%2522channel%2522%253A%2522ALIPAYAPP%2522%257D%252C%2522external_agreement_no%2522%253A%2522xidong___2317%2522%252C%2522external_logon_id%2522%253A%252213852852877%2522%252C%2522personal_product_code%2522%253A%2522GENERAL_WITHHOLDING_P%2522%252C%2522product_code%2522%253A%2522GENERAL_WITHHOLDING%2522%252C%2522sign_scene%2522%253A%2522INDUSTRY%257CCARRENTAL%2522%252C%2522third_party_type%2522%253A%2522PARTNER%2522%257D%26sign%3Df3pjBDTRftOwXWnCqAMAnkBfGTFlcMmZI8hEgmV6uREZRXVDuLsSjD8WO%252FeZ1fjDG8GqVO9t1AN7q6yCUHKX%252Bw%252FE7efXwpVDWldr4iVuXDtNd3UJDJUiRJhIm6b73czWacVzm1XIery%252F2DyKI2y08tBf5NNWuQCC3d%252FITxziTl8%253D%26timestamp%3D2017-06-27%2B14%253A44%253A00%26sign_type%3DRSA%26notify_url%3Dhttp%253A%252F%252Fapi.test.alipay.net%252Fatinterface%252Freceive_notify.htm%26charset%3DUTF-8%26app_id%3D2017060101317939%26method%3Dalipay.user.agreement.page.sign%26return_url%3Dhttp%253A%252F%252Fapi.test.alipay.net%252Fatinterface%252Freceive_notify.htm%26version%3D1.0',
		success: (res) => {
			my.alert({
				title: 'success', // alert框的标题
				content: JSON.stringify(res)
			});
		},
		fail: (res) => {
			my.alert({
				title: 'fail', // alert框的标题
				content: JSON.stringify(res)
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/card-voucher-ticket
	my.openCardList();
	my.openMerchantCardList({ partnerId: '2088xxxxx' });
	// 传入passId来打开
	my.openCardDetail({ passId: "11xxxxx" });
	my.openVoucherList();
	my.openMerchantVoucherList({ partnerId: '2088xxxx' });
	// 传入passId来打开
	my.openVoucherDetail({ passId: "20170921" });

	// 传入partnerId 和 serialNumber来打开
	my.openVoucherDetail({
		partnerId: "2018xxxx",
		serialNumber: "20170921"
	});
	// 传入passId来打开
	my.openKBVoucherDetail({ passId: "20170921" });

	// 传入partnerId 和 serialNumber来打开
	my.openKBVoucherDetail({
		partnerId: "2088xxxx",
		serialNumber: "20170921"
	});
	my.openTicketList();
	my.openMerchantTicketList({ partnerId: '2088xxxx' });
	// 传入passId来打开
	my.openTicketDetail({ passId: "20170921" });

	// 传入partnerId 和 serialNumber来打开
	my.openTicketDetail({
		partnerId: "2088xxxx",
		serialNumber: "20170921"
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/add-card-auth
	my.addCardAuth({
		url: '从 openapi 接口获取到的 url',
		success: (res) => {
			my.alert({ content: '授权成功' });
		},
		fail: (res) => {
			my.alert({ content: '授权失败' });
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/zm-service
	my.startZMVerify({
		bizNo: 'your-biz-no',
		success: (res) => {
			my.alert({ title: 'success:' + JSON.stringify(res) });
		},
		fail: (res) => {
			my.alert({ title: 'fail: ' + JSON.stringify(res) });
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/zmcreditborrow
	my.zmCreditBorrow({
		credit_biz: "",
		out_order_no: "",
		borrow_shop_name: "",
		goods_name: "",
		product_code: "w1010100000000002858",
		rent_unit: "HOUR_YUAN",
		rent_amount: "0.10",
		deposit_amount: "0.50",
		deposit_state: "Y",
		invoke_return_url: "",
		invoke_type: "TINYAPP",
		borrow_time: "2017-04-27 10:01:01",
		expiry_time: "2017-05-27 10:01:01",
		rent_info: "2hour-free",
		success: (res) => {
			try {
				const { resultStatus, result } = res;
				switch (resultStatus) {
					case '9000':
						const callbackData = result.callbackData;
						const decodedCallbackData = decodeURIComponent(callbackData);
						const json = JSON.parse(decodedCallbackData.match(/{.*}/)!.toString());
						const jsonStr = JSON.stringify(json, null, 4);
						if (json.success === true || json.success === 'true') {
							// 创建订单成功, 此时可以跳转到订单详情页面
							my.alert({ content: '下单成功: ' + jsonStr });
						} else {
							// 创建订单失败, 请提示用户创建失败
							my.alert({ content: '下单失败: ' + jsonStr });
						}
						// (this as any as my.Page).setData({
						// 	callbackData,
						// 	decodedCallbackData,
						// 	parsedJSON: jsonStr,
						// });
						break;
					case '6001':
						// 用户点击返回, 取消此次服务, 此时可以给提示
						my.alert({ content: '取消' });
						break;
					default:
						break;
				}
			} catch (error) {
				// 异常, 请在这里提示用户稍后重试
				my.alert({
					content: '异常' + JSON.stringify(error, null, 4)
				});
			}
		},
		fail: (error) => {
			// 调用接口失败, 请在这里提示用户稍后重试
			my.alert({
				content: '调用失败' + JSON.stringify(error, null, 4)
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/templatemessage
})();

(() => {
	// https://docs.alipay.com/mini/api/text-identification
	my.textRiskIdentification({
		content: '加我支付宝',
		type: ['keyword', '0', '1', '2', '3'],
		success: (res) => {
			my.alert({
				title: 'ok', // alert 框的标题
				content: JSON.stringify(res),
			});
		},
		fail: (res) => {
			my.alert({
				title: 'fail', // alert 框的标题
				content: JSON.stringify(res),
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/open-miniprogram
	my.navigateToMiniProgram({
		appId: 'xxxx',
		extraData: {
			data1: "test"
		},
		success: (res) => {
			console.log(JSON.stringify(res));
		},
		fail: (res) => {
			console.log(JSON.stringify(res));
		}
	});
	my.navigateBackMiniProgram({
		extraData: {
			data1: "test"
		},
		success: (res) => {
			console.log(JSON.stringify(res));
		},
		fail: (res) => {
			console.log(JSON.stringify(res));
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/webview-context
	Page({
		onLoad() {
			this.webViewContext = my.createWebViewContext('web-view-1');
		},
		// 接收来自H5的消息
		onMessage(e: any) {
			console.log(e); // {'sendToMiniProgram': '0'}
			// 向H5发送消息
			this.webViewContext.postMessage({ sendToWebView: '1' });
		}
	});
	// H5的js代码中需要先定义my.onMessage 用于接收来自小程序的消息。
	my.onMessage = (e) => {
		console.log(e); // {'sendToWebView': '1'}
	};
	// H5想小程序发送消息
	my.postMessage({ sendToMiniProgram: '0' });
})();

(() => {
	// https://docs.alipay.com/mini/api/media-image
	const img = null as any as HTMLImageElement;
	my.chooseImage({
		count: 2,
		success: (res) => {
			img.src = res.apFilePaths[0];
		},
	});
	my.previewImage({
		current: 2,
		urls: [
			'https://img.alicdn.com/tps/TB1sXGYIFXXXXc5XpXXXXXXXXXX.jpg',
			'https://img.alicdn.com/tps/TB1pfG4IFXXXXc6XXXXXXXXXXXX.jpg',
			'https://img.alicdn.com/tps/TB1h9xxIFXXXXbKXXXXXXXXXXXX.jpg'
		],
	});
	my.saveImage({
		url: 'https://img.alicdn.com/tps/TB1sXGYIFXXXXc5XpXXXXXXXXXX.jpg'
	});
	my.compressImage({
		apFilePaths: ['https://resource/apmlcc0ed184daffc5a0d8da86b2f518cf7b.image'],
		// level: 1,
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});
	// 网络图片路径
	my.getImageInfo({
		src: 'https://img.alicdn.com/tps/TB1sXGYIFXXXXc5XpXXXXXXXXXX.jpg',
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});

	// apFilePath
	my.chooseImage({
		success: (res) => {
			my.getImageInfo({
				src: res.apFilePaths[0],
				success: (res) => {
					console.log(JSON.stringify(res));
				}
			});
		},
	});

	// 相对路径
	my.getImageInfo({
		src: 'image/api.png',
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/storage
	my.setStorage({
		key: 'currentCity',
		data: {
			cityName: '杭州',
			adCode: '330100',
			spell: ' hangzhou',
		},
		success() {
			my.alert({ content: '写入成功' });
		}
	});
	my.setStorageSync({
		key: 'currentCity',
		data: {
			cityName: '杭州',
			adCode: '330100',
			spell: ' hangzhou',
		}
	});
	my.getStorage({
		key: 'currentCity',
		success(res) {
			my.alert({ content: '获取成功：' + res.data.cityName });
		},
		fail(res) {
			my.alert({ content: res.errorMessage });
		}
	});
	const res = my.getStorageSync({ key: 'currentCity' });
	my.alert({
		content: JSON.stringify(res.data),
	});
	my.removeStorage({
		key: 'currentCity',
		success() {
			my.alert({ content: '删除成功' });
		}
	});
	my.removeStorageSync({
		key: 'currentCity',
	});
	my.clearStorage();
	my.clearStorageSync();
	my.getStorageInfo({
		success(res) {
			console.log(res.keys);
			console.log(res.currentSize);
			console.log(res.limitSize);
		}
	});
	const res1 = my.getStorageInfoSync();
	console.log(res1.keys);
	console.log(res1.currentSize);
	console.log(res1.limitSize);
})();

(() => {
	// https://docs.alipay.com/mini/api/file
	my.chooseImage({
		success: (res) => {
			my.saveFile({
				apFilePath: res.apFilePaths[0],
				success: (res) => {
					console.log(JSON.stringify(res));
				},
			});
		},
	});
	my.getFileInfo({
		apFilePath: 'https://resource/apml953bb093ebd2834530196f50a4413a87.video',
		digestAlgorithm: 'sha1',
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});
	my.getSavedFileInfo({
		apFilePath: 'https://resource/apml953bb093ebd2834530196f50a4413a87.video',
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});
	my.getSavedFileList({
		success: (res) => {
			console.log(JSON.stringify(res));
		}
	});
	my.getSavedFileList({
		success: (res) => {
			my.removeSavedFile({
				apFilePath: res.fileList[0].apFilePath,
				success: (res) => {
					console.log('remove success');
				}
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/location
	my.getLocation({
		success(res) {
			my.hideLoading();
			console.log(res);
			/* that对象为Page可以设置数据刷新界面
			that.setData({
			  hasLocation: true,
			  location: formatLocation(res.longitude, res.latitude)
			})
			*/
		},
		fail() {
			my.hideLoading();
			my.alert({ title: '定位失败' });
		},
	});
	my.openLocation({
		longitude: '121.549697',
		latitude: '31.227250',
		name: '支付宝',
		address: '杨高路地铁站',
	});
	my.chooseLocation({
		success: (res) => {
			console.log(res);
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/network
	my.httpRequest({
		url: 'http://httpbin.org/post',
		method: 'POST',
		data: {
			from: '支付宝',
			production: 'AlipayJSAPI',
		},
		dataType: 'json',
		success(res) {
			my.alert({ content: 'success' });
		},
		fail(res) {
			my.alert({ content: 'fail' });
		},
		complete(res) {
			my.hideLoading();
			my.alert({ content: 'complete' });
		}
	});
	my.uploadFile({
		url: '请使用自己服务器地址',
		fileType: 'image',
		fileName: 'file',
		filePath: '...',
		success: (res) => {
			my.alert({
				content: '上传成功'
			});
		},
	});
	my.downloadFile({
		url: 'http://img.alicdn.com/tfs/TB1x669SXXXXXbdaFXXXXXXXXXX-520-280.jpg',
		success({ apFilePath }) {
			my.previewImage({
				urls: [apFilePath],
			});
		},
		fail(res) {
			my.alert({
				content: res.errorMessage || res.error,
			});
		},
	});
	my.connectSocket({
		url: 'test.php',
		data: {},
		header: {
			'content-type': 'application/json'
		},
		method: 'GET'
	});
	my.connectSocket({
		url: 'test.php',
	});

	my.onSocketOpen(() => {
		console.log('WebSocket 连接已打开！');
	});
	Page({
		onLoad() {
			this.callback = this.callback.bind(this);
			my.onSocketOpen(this.callback);
		},
		onUnload() {
			my.offSocketOpen(this.callback);
		},
		callback() {
		},
	});
	my.connectSocket({
		url: '开发者的服务器地址'
	});

	my.onSocketOpen(() => {
		console.log('WebSocket 连接已打开！');
	});

	my.onSocketError(() => {
		console.log('WebSocket 连接打开失败，请检查！');
	});
	Page({
		onLoad() {
			this.callback = this.callback.bind(this);
			my.onSocketError(this.callback);
		},
		onUnload() {
			my.offSocketError(this.callback);
		},
		callback() {
			my.sendSocketMessage({
				data: this.data.toSendMessage, // 需要发送的内容
				success: (res) => {
					my.alert({ content: '数据发送！' + this.data.toSendMessage });
				},
			});
		},
	});
	my.connectSocket({
		url: '服务器地址'
	});

	my.onSocketMessage((res) => {
		console.log('收到服务器内容：' + res.data);
	});
	my.onSocketOpen(() => {
		my.closeSocket();
	});

	my.onSocketClose(() => {
		console.log('WebSocket 已关闭！');
	});
	Page({
		// onLoad() {
		onLaunch() {
			// 注意： 回调方法的注册在整个小程序启动阶段只要做一次，调多次会有多次回调
			my.onSocketClose(() => {
				my.alert({ content: '连接已关闭！' });
				this.setData({
					sendMessageAbility: false,
					closeLinkAbility: false,
				});
			});
			// 注意： 回调方法的注册在整个小程序启动阶段只要做一次，调多次会有多次回调
			my.onSocketOpen(() => {
				my.alert({ content: '连接已打开！' });
				this.setData({
					sendMessageAbility: true,
					closeLinkAbility: true,
				});
			});

			my.onSocketError((res) => {
				my.alert({ content: 'WebSocket 连接打开失败，请检查！' + res });
			});

			// 注意： 回调方法的注册在整个小程序启动阶段只要做一次，调多次会有多次回调
			my.onSocketMessage((res) => {
				my.alert({ content: '收到数据！' + JSON.stringify(res) });
			});
		},
		connect_start() {
			my.connectSocket({
				url: '服务器地址', // 开发者服务器接口地址，必须是 wss 协议，且域名必须是后台配置的合法域名
				success: (res) => {
					my.showToast({
						content: 'success', // 文字内容
					});
				},
				fail: () => {
					my.showToast({
						content: 'fail', // 文字内容
					});
				}
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/can-i-use
	my.canIUse('getFileInfo');
	my.canIUse('closeSocket.object.code');
	my.canIUse('getLocation.object.type');
	my.canIUse('getSystemInfo.return.brand');
	my.canIUse('lifestyle');
	my.canIUse('button.open-type.share');
})();

(() => {
	// https://docs.alipay.com/mini/api/sdk-version
	console.log(my.SDKVersion);
})();

(() => {
	// https://docs.alipay.com/mini/api/system-info
	Page({
		data: {
			systemInfo: {}
		},
		getSystemInfoPage(this: my.Page) {
			my.getSystemInfo({
				success: (res) => {
					this.setData({
						systemInfo: res
					});
				}
			});
		},
	});
	Page({
		data: {
			systemInfo: {}
		},
		getSystemInfoSyncPage(this: my.Page) {
			this.setData({
				systemInfo: my.getSystemInfoSync()
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/network-status
	Page({
		data: {
			hasNetworkType: false
		},
		getNetworkType(this: my.Page) {
			my.getNetworkType({
				success: (res) => {
					this.setData({
						hasNetworkType: true,
						networkType: res.networkType
					});
				}
			});
		},
		clear(this: my.Page) {
			this.setData({
				hasNetworkType: false,
				networkType: ''
			});
		},
	});
	my.onNetworkStatusChange((res) => {
		console.log(JSON.stringify(res));
	});
	my.offNetworkStatusChange();
})();

(() => {
	// https://docs.alipay.com/mini/api/clipboard
	Page({
		data: {
			text: '3.1415926',
			copy: '',
		},

		handlePaste(this: my.Page) {
			my.getClipboard({
				success: ({ text }) => {
					this.setData({ copy: text });
				},
			});
		},
	});
	Page({
		data: {
			text: '3.1415926',
			copy: '',
		},

		handleCopy() {
			my.setClipboard({
				text: this.data.text,
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/shake
	Page({
		watchShake() {
			my.watchShake({
				success() {
					console.log('动起来了');
					my.alert({ title: '动起来了 o.o' });
				}
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/vibrate
	Page({
		vibrate() {
			my.vibrate({
				success: () => {
					my.alert({ title: '震动起来了' });
				}
			});
		},
	});
	Page({
		vibrateLong() {
			my.vibrateLong({
				success: () => {
					my.alert({ title: '震动起来了' });
				}
			});
		},
	});
	Page({
		vibrateShort() {
			my.vibrateShort({
				success: () => {
					my.alert({ title: '震动起来了' });
				}
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/macke-call
	Page({
		makePhoneCall() {
			my.makePhoneCall({ number: '95888' });
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/get-server-time
	// getServerTime(){
	// 	my.getServerTime({
	// 		success: (res) => {
	// 			my.alert({
	// 				title: res.time,
	// 			});
	// 		},
	// 	});
	// };
})();

(() => {
	// https://docs.alipay.com/mini/api/user-capture-screen
	my.onUserCaptureScreen(() => {
		my.alert({
			content: '收到用户截屏事件'
		});
	});
	my.offUserCaptureScreen();
})();

(() => {
	// https://docs.alipay.com/mini/api/screen-brightness
	my.setKeepScreenOn({
		keepScreenOn: true,
		success: (res) => {
		},
		fail: (res) => {
		},
	});
	my.getScreenBrightness({
		success: (res) => {
			console.log(JSON.stringify(res));
		},
		fail: (res) => {
		},
	});
	my.setScreenBrightness({
		brightness: 0.5,
		success: (res) => {
			console.log(JSON.stringify(res));
		},
		fail: (res) => {
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/show-auth-guide
	my.showAuthGuide({
		authType: 'LBSSERVICE'
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/scan
	Page({
		scan() {
			my.scan({
				type: 'qr',
				success: (res) => {
					my.alert({ title: res.code });
				},
			});
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/bluetooth-intro
	// 初始化
	my.openBluetoothAdapter({
		success: (res) => {
			console.log(res);
		}
	});
	// 注册发现事件
	my.onBluetoothDeviceFound({
		success: (res) => {
			const device = res.devices[0];
			// 连接发现的设备
			my.connectBLEDevice({
				deviceId,
				success: (res) => {
					console.log(res);
				},
				fail: (res) => {
				},
				complete: (res) => {
				}
			});
			// 停止搜索
			my.stopBluetoothDevicesDiscovery({
				success: (res) => {
					console.log(res);
				},
				fail: (res) => {
				},
				complete: (res) => {
				}
			});
		}
	});
	const deviceId = 'test';
	const serviceId = 'test';
	const characteristicId = 'test';
	// 注册连接事件
	my.onBLEConnectionStateChanged({
		success: (res) => {
			console.log(res);
			if (res.connected) {
				// 开始读写notify等操作
				my.notifyBLECharacteristicValueChange({
					deviceId,
					serviceId,
					characteristicId,
					success: (res) => {
						console.log(res);
					},
					fail: (res) => {
					},
					complete: (res) => {
					}
				});
			}
		}
	});
	// 注册接收read或notify的数据
	my.onBLECharacteristicValueChange({
		success: (res) => {
			console.log(res);
		}
	});
	// 开始搜索
	my.startBluetoothDevicesDiscovery({
		services: ['fff0'],
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});

	// 断开连接
	my.disconnectBLEDevice({
		deviceId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});

	// 注销事件
	my.offBluetoothDeviceFound();
	my.offBLEConnectionStateChanged();
	my.offBLECharacteristicValueChange();

	// 退出蓝牙模块
	my.closeBluetoothAdapter({
		success: (res) => {
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/bluetooth-api
	my.openBluetoothAdapter({
		success: (res) => {
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.closeBluetoothAdapter({
		success: (res) => {
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.getBluetoothAdapterState({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.startBluetoothDevicesDiscovery({
		services: ['fff0'],
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.stopBluetoothDevicesDiscovery({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.getBluetoothDevices({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.getConnectedBluetoothDevices({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	const deviceId = 'test';
	const serviceId = 'test';
	const characteristicId = 'test';
	my.connectBLEDevice({
		// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
		deviceId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.disconnectBLEDevice({
		deviceId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.writeBLECharacteristicValue({
		deviceId,
		serviceId,
		characteristicId,
		value: 'fffe',
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.readBLECharacteristicValue({
		deviceId,
		serviceId,
		characteristicId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.notifyBLECharacteristicValueChange({
		deviceId,
		serviceId,
		characteristicId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.getBLEDeviceServices({
		deviceId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	my.getBLEDeviceCharacteristics({
		deviceId,
		serviceId,
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});
	Page({
		onLoad() {
			this.callback = this.callback.bind(this);
			my.onBluetoothDeviceFound(this.callback);
		},
		onUnload() {
			my.offBluetoothDeviceFound(this.callback);
		},
		callback(res: any) {
			console.log(res);
		},
	});
	my.offBluetoothDeviceFound();
	Page({
		onLoad() {
			this.callback = this.callback.bind(this);
			my.onBLECharacteristicValueChange(this.callback);
		},
		onUnload() {
			my.offBLECharacteristicValueChange(this.callback);
		},
		callback(res: any) {
			console.log(res);
		},
	});
	my.offBLECharacteristicValueChange();
	my.offBLEConnectionStateChanged();
	my.offBluetoothAdapterStateChange();
})();

(() => {
	// https://docs.alipay.com/mini/api/yqleyc
	my.startBeaconDiscovery({
		uuids: ['uuid1', 'uuid2'],
		success: (res) => {
			console.log(res);
		},
		fail: () => {
		},
		complete: () => {
		}
	});

	my.stopBeaconDiscovery({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});

	my.getBeacons({
		success: (res) => {
			console.log(res);
		},
		fail: (res) => {
		},
		complete: (res) => {
		}
	});

	my.onBeaconUpdate({
		success: (res) => {
		},
	});

	my.onBeaconServiceChange({
		success: (res) => {
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/data-safe
	Page({
		data: {
			inputValue: '',
			outputValue: '',
		},
		onInput(this: my.Page, e: any) {
			this.setData({ inputValue: e.detail.value });
		},
		onEncrypt(this: my.Page) {
			my.rsa({
				action: 'encrypt',
				// 设置公钥
				// tslint:disable-next-line:max-line-length
				key: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKmi0dUSVQ04hL6GZGPMFK8+d6\nGzulagP27qSUBYxIJfE04KT+OHVeFFb6K+8nWDea5mkmZrIgp022zZVDgdWPNM62\n3ouBwHlsfm2ekey8PpQxfXaj8lhM9t8rJlC4FEc0s8Qp7Q5/uYrowQbT9m6t7BFK\n3egOO2xOKzLpYSqfbQIDAQAB',
				text: this.data.inputValue,
				success: (result) => {
					this.setData({ outputValue: result.text });
				},
				fail(e) {
					my.alert({
						content: e.errorMessage || e.error,
					});
				},
			});
		},
		onDecrypt(this: my.Page) {
			my.rsa({
				action: 'decrypt',
				text: this.data.inputValue,
				// 设置私钥
				// tslint:disable-next-line:prefer-template
				key: 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMqaLR1RJVDTiEvo\n' +
					'ZkY8wUrz53obO6VqA/bupJQFjEgl8TTgpP44dV4UVvor7ydYN5rmaSZmsiCnTbbN\n' +
					'lUOB1Y80zrbei4HAeWx+bZ6R7Lw+lDF9dqPyWEz23ysmULgURzSzxCntDn+5iujB\n' +
					'BtP2bq3sEUrd6A47bE4rMulhKp9tAgMBAAECgYBjsfRLPdfn6v9hou1Y2KKg+F5K\n' +
					'ZsY2AnIK+6l+sTAzfIAx7e0ir7OJZObb2eyn5rAOCB1r6RL0IH+MWaN+gZANNG9g\n' +
					'pXvRgcZzFY0oqdMZDuSJjpMTj7OEUlPyoGncBfvjAg0zdt9QGAG1at9Jr3i0Xr4X\n' +
					'6WrFhtfVlmQUY1VsoQJBAPK2Qj/ClkZNtrSDfoD0j083LcNICqFIIGkNQ+XeuTwl\n' +
					'+Gq4USTyaTOEe68MHluiciQ+QKvRAUd4E1zeZRZ02ikCQQDVscINBPTtTJt1JfAo\n' +
					'wRfTzA0Lvgig136xLLeQXREcgq1lzgkf+tGyUGYoy9BXsV0mOuYAT9ldja4jhJeq\n' +
					'cEulAkEAuSJ5KjV9dyb0RIFAz5C8d8o5KAodwaRIxJkPv5nCZbT45j6t9qbJxDg8\n' +
					'N+vghDlHI4owvl5wwVlAO8iQBy8e8QJBAJe9CVXFV0XJR/n/XnER66FxGzJjVi0f\n' +
					'185nOlFARI5CHG5VxxT2PUCo5mHBl8ctIj+rQvalvGs515VQ6YEVDCECQE3S0AU2\n' +
					'BKyFVNtTpPiTyRUWqig4EbSXwjXdr8iBBJDLsMpdWsq7DCwv/ToBoLg+cQ4Crc5/\n5DChU8P30EjOiEo=',
				success: (result) => {
					this.setData({ outputValue: result.text });
				},
				fail(e) {
					my.alert({
						content: e.errorMessage || e.error,
					});
				},
			});
		},
	});
})();

(() => {
	// https://docs.alipay.com/mini/api/share_app
	Page({
		onShareAppMessage() {
			return {
				title: '小程序示例',
				desc: '小程序官方示例Demo，展示已支持的接口能力及组件。',
				path: 'page/component/component-pages/view/view?param=123'
			};
		},
	});

	my.hideShareMenu();
})();

(() => {
	// https://docs.alipay.com/mini/api/report
	my.reportAnalytics('purchase', {
		status: 200,
		reason: 'ok'
	});
})();
